package com.example.yiqiuser.controller;


import com.example.yiqiuser.entity.LoginLog;
import com.example.yiqiuser.entity.User;
import com.example.yiqiuser.service.CommonFileHandlerService;
import com.example.yiqiuser.service.LoginLogService;
import com.example.yiqiuser.service.UserService;
import com.example.yiqiuser.util.Page;
import com.example.yiqiuser.util.Result;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @ fileName:UserController
 * @ description:
 * @ author:xjd
 * @ createTime:2023/3/27 20:22
 * @ version:1.0.0
 */
@RestController
@RequestMapping("user")
public class UserController  extends BaseController{

    @Resource
    private UserService userService;


    @Resource
    private LoginLogService loginLogService;

    /**
     * 获取session两种方式：1.写形参；2.依赖注入
     */
    @Resource
    private HttpSession httpSession;

    @Resource
    private HttpServletRequest request;

    @Resource
    private CommonFileHandlerService commonFileHandlerService;

    /**
     * 文件上传操作
     *        必须使用@RequestParam绑定上传对象，否则文件上传不了  里面的名称必须和前端对应
     * @param file1   MultipartFile  该类是springmvc封装的获取上传文件的对象
     * @return
     */
    @PostMapping("uploadFile")
    public Result uploadFile(@RequestParam("file2") MultipartFile file1){
        //调用封装的服务接口 进行文件上传
        return success(commonFileHandlerService.uploadFile(file1,"Project/user"));
    }
    /**
     * 跳转登陆界面
     * @return
     */
    /*
    @RequestMapping("toLogin")
    public String toLogin(){
        return "login";
    }*/


    @RequestMapping("index")
    public String toIndex(){
        return "index";
    }


    @GetMapping("getLoginSession")
    public Result getLoginSession(HttpSession session){
        return success((User)session.getAttribute("userInfoA"));
    }



    /**
     * 员工登录
     * @param user
     * @param session
     * @return
     */
    @PostMapping("login")
    public Result login(@RequestBody User user, HttpSession session){
        //实例化Emp对象
     /*   User user = new User();
        user.setUserName(username);
        user.setPassword(password);*/
        //System.out.println("----------用户数据为："+user);
        //查询数据
        User userInfo = userService.checkUser(user);

        //实例化对象
        LoginLog loginLogadd = new LoginLog();
        //判断是否为null
        if (userInfo!=null){
            //把用户信息存入会话
            session.setAttribute("userInfoA",userInfo);
            //调用服务层 LoginLogService 添加方法 待续。。。。。。。。。。。
            if (userInfo.getUserName() != null && userInfo.getUserName() != "") {
                loginLogadd.setLoginName(userInfo.getUserName());//设置登录对象名称 使用UserName登录
            }

            /*System.out.println("userInfo.getUserName()----------------" + userInfo.getUserName());*/


            loginLogadd.setInfoId("0");  //设置默认登陆id
            loginLogadd.setIpaddr("198.11.11.11");  //设置登录ip
            loginLogadd.setLoginLocation("内网");  //设置登录内外网信息
            loginLogadd.setBrowser("谷歌浏览器");//设置登录浏览器类型
            loginLogadd.setOs("window10");//设置操作系统
            loginLogadd.setMsg("登陆成功");//设置默认登录信息
            loginLogadd.setStatus(userInfo.getStatus());//设置登陆状态
            /*System.out.println("---------------");
            System.out.println("userInfo.getStatus()----------------" + userInfo.getStatus());*/


            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String nowDataString = formatter.format(new Date());


            loginLogadd.setLoginTime(nowDataString);//设置登陆访问时间

            /*System.out.println("loginLog.toString()------------------------------" + loginLogadd.toString());*/
            loginLogService.addLoginLog(loginLogadd);

                //使用重定向跳转
            return success("登录成功");
        }else {
            //登陆账号
            loginLogadd.setLoginName(user.getUserName());//设置登录对象名称
            /*System.out.println("user.getUserName()----------------" + user.getUserName());*/


            loginLogadd.setInfoId("0");  //设置默认登陆id
            loginLogadd.setIpaddr("198.11.11.11");  //设置登录ip
            loginLogadd.setLoginLocation("内网");  //设置登录内外网信息
            loginLogadd.setBrowser("谷歌浏览器");//设置登录浏览器类型
            loginLogadd.setOs("window10");//设置操作系统
            loginLogadd.setMsg("登陆失败");//设置默认登录信息
            loginLogadd.setStatus("0");//设置登陆状态

            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String nowDataString = formatter.format(new Date());


            loginLogadd.setLoginTime(nowDataString);//设置登陆访问时间

            /*System.out.println("loginLog.toString()------------------------------" + loginLogadd.toString());*/
            loginLogService.addLoginLog(loginLogadd);

            //request.setAttribute("msg","用户名或密码错误！");
            //使用转发到登录页面
            return error("登录失败");
        }
    }

    /**
     * 分页带参查询
     * @param page
     * @return
     */
    @PostMapping("all")
    public Result queryPage(@RequestBody Page<User> page) {
        return success(userService.queryPage(page));
    }

    /**
     * 根据编号查询
     * @param userId
     * @return
     */
    @GetMapping("queryById")
    public Result queryById(Integer userId) {
        return success(userService.queryById(userId));
    }

    /**
     * 添加
     * @param user
     * @return
     */
    @PostMapping("add")
    public Result add(@RequestBody User user) {
        return success(userService.add(user));
    }

    /**
     * 更新
     * @param user
     * @return
     */
    @PostMapping("update")
    public Result update(@RequestBody User user) {
        return success(userService.update(user));
    }

    /**
     * 根据编号删除
     * @param user
     * @return
     */
    @PostMapping("deleteById")
    public Result deleteById(@RequestBody User user){
        return success(userService.deleteById(user));
    }


}
